package com.hotel.vo;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 预订视图对象
 */
public class ReservationVO {
    
    private Long id;
    
    private String reservationNumber;
    
    private String customerName;
    
    private String customerPhone;
    
    private String customerIdCard;
    
    private String customerEmail;
    
    private Long roomTypeId;
    
    private String roomTypeName;
    
    private String roomTypeCode;
    
    private Long roomId;
    
    private String roomNumber;
    
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate checkinDate;
    
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate checkoutDate;
    
    private Integer guestCount;
    
    private Integer roomCount;
    
    private Integer nights;
    
    private BigDecimal totalAmount;
    
    private BigDecimal paidAmount;
    
    private BigDecimal balanceAmount;
    
    private String status;
    
    private String statusName;
    
    private String source;
    
    private String sourceName;
    
    private String specialRequests;
    
    private String remarks;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime arrivalTime;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime departureTime;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    // 扩展字段
    private String createdBy;
    
    private String updatedBy;
    
    private String cancelReason;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime cancelTime;
    
    private String cancelBy;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime confirmTime;
    
    private String confirmBy;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime checkinTime;
    
    private String checkinBy;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime checkoutTime;
    
    private String checkoutBy;
    
    private BigDecimal roomPrice;
    
    private BigDecimal extraCharges;
    
    private BigDecimal discountAmount;
    
    private String paymentStatus;
    
    private String paymentMethod;
    
    private Integer extensionCount;
    
    private Integer roomChangeCount;
    
    private Boolean isVip;
    
    private String memberLevel;
    
    private Integer earnedPoints;
    
    // 构造函数
    public ReservationVO() {}
    
    // Getter和Setter方法
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getReservationNumber() {
        return reservationNumber;
    }
    
    public void setReservationNumber(String reservationNumber) {
        this.reservationNumber = reservationNumber;
    }
    
    public String getCustomerName() {
        return customerName;
    }
    
    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }
    
    public String getCustomerPhone() {
        return customerPhone;
    }
    
    public void setCustomerPhone(String customerPhone) {
        this.customerPhone = customerPhone;
    }
    
    public String getCustomerIdCard() {
        return customerIdCard;
    }
    
    public void setCustomerIdCard(String customerIdCard) {
        this.customerIdCard = customerIdCard;
    }
    
    public String getCustomerEmail() {
        return customerEmail;
    }
    
    public void setCustomerEmail(String customerEmail) {
        this.customerEmail = customerEmail;
    }
    
    public Long getRoomTypeId() {
        return roomTypeId;
    }
    
    public void setRoomTypeId(Long roomTypeId) {
        this.roomTypeId = roomTypeId;
    }
    
    public String getRoomTypeName() {
        return roomTypeName;
    }
    
    public void setRoomTypeName(String roomTypeName) {
        this.roomTypeName = roomTypeName;
    }
    
    public String getRoomTypeCode() {
        return roomTypeCode;
    }
    
    public void setRoomTypeCode(String roomTypeCode) {
        this.roomTypeCode = roomTypeCode;
    }
    
    public Long getRoomId() {
        return roomId;
    }
    
    public void setRoomId(Long roomId) {
        this.roomId = roomId;
    }
    
    public String getRoomNumber() {
        return roomNumber;
    }
    
    public void setRoomNumber(String roomNumber) {
        this.roomNumber = roomNumber;
    }
    
    public LocalDate getCheckinDate() {
        return checkinDate;
    }
    
    public void setCheckinDate(LocalDate checkinDate) {
        this.checkinDate = checkinDate;
    }
    
    public LocalDate getCheckoutDate() {
        return checkoutDate;
    }
    
    public void setCheckoutDate(LocalDate checkoutDate) {
        this.checkoutDate = checkoutDate;
    }
    
    public Integer getGuestCount() {
        return guestCount;
    }
    
    public void setGuestCount(Integer guestCount) {
        this.guestCount = guestCount;
    }
    
    public Integer getRoomCount() {
        return roomCount;
    }
    
    public void setRoomCount(Integer roomCount) {
        this.roomCount = roomCount;
    }
    
    public Integer getNights() {
        return nights;
    }
    
    public void setNights(Integer nights) {
        this.nights = nights;
    }
    
    public BigDecimal getTotalAmount() {
        return totalAmount;
    }
    
    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }
    
    public BigDecimal getPaidAmount() {
        return paidAmount;
    }
    
    public void setPaidAmount(BigDecimal paidAmount) {
        this.paidAmount = paidAmount;
    }
    
    public BigDecimal getBalanceAmount() {
        return balanceAmount;
    }
    
    public void setBalanceAmount(BigDecimal balanceAmount) {
        this.balanceAmount = balanceAmount;
    }
    
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    
    public String getStatusName() {
        return statusName;
    }
    
    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }
    
    public String getSource() {
        return source;
    }
    
    public void setSource(String source) {
        this.source = source;
    }
    
    public String getSourceName() {
        return sourceName;
    }
    
    public void setSourceName(String sourceName) {
        this.sourceName = sourceName;
    }
    
    public String getSpecialRequests() {
        return specialRequests;
    }
    
    public void setSpecialRequests(String specialRequests) {
        this.specialRequests = specialRequests;
    }
    
    public String getRemarks() {
        return remarks;
    }
    
    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }
    
    public LocalDateTime getArrivalTime() {
        return arrivalTime;
    }
    
    public void setArrivalTime(LocalDateTime arrivalTime) {
        this.arrivalTime = arrivalTime;
    }
    
    public LocalDateTime getDepartureTime() {
        return departureTime;
    }
    
    public void setDepartureTime(LocalDateTime departureTime) {
        this.departureTime = departureTime;
    }
    
    public LocalDateTime getCreateTime() {
        return createTime;
    }
    
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
    
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }
    
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
    
    public String getCreatedBy() {
        return createdBy;
    }
    
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }
    
    public String getUpdatedBy() {
        return updatedBy;
    }
    
    public void setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy;
    }
    
    public String getCancelReason() {
        return cancelReason;
    }
    
    public void setCancelReason(String cancelReason) {
        this.cancelReason = cancelReason;
    }
    
    public LocalDateTime getCancelTime() {
        return cancelTime;
    }
    
    public void setCancelTime(LocalDateTime cancelTime) {
        this.cancelTime = cancelTime;
    }
    
    public String getCancelBy() {
        return cancelBy;
    }
    
    public void setCancelBy(String cancelBy) {
        this.cancelBy = cancelBy;
    }
    
    public LocalDateTime getConfirmTime() {
        return confirmTime;
    }
    
    public void setConfirmTime(LocalDateTime confirmTime) {
        this.confirmTime = confirmTime;
    }
    
    public String getConfirmBy() {
        return confirmBy;
    }
    
    public void setConfirmBy(String confirmBy) {
        this.confirmBy = confirmBy;
    }
    
    public LocalDateTime getCheckinTime() {
        return checkinTime;
    }
    
    public void setCheckinTime(LocalDateTime checkinTime) {
        this.checkinTime = checkinTime;
    }
    
    public String getCheckinBy() {
        return checkinBy;
    }
    
    public void setCheckinBy(String checkinBy) {
        this.checkinBy = checkinBy;
    }
    
    public LocalDateTime getCheckoutTime() {
        return checkoutTime;
    }
    
    public void setCheckoutTime(LocalDateTime checkoutTime) {
        this.checkoutTime = checkoutTime;
    }
    
    public String getCheckoutBy() {
        return checkoutBy;
    }
    
    public void setCheckoutBy(String checkoutBy) {
        this.checkoutBy = checkoutBy;
    }
    
    public BigDecimal getRoomPrice() {
        return roomPrice;
    }
    
    public void setRoomPrice(BigDecimal roomPrice) {
        this.roomPrice = roomPrice;
    }
    
    public BigDecimal getExtraCharges() {
        return extraCharges;
    }
    
    public void setExtraCharges(BigDecimal extraCharges) {
        this.extraCharges = extraCharges;
    }
    
    public BigDecimal getDiscountAmount() {
        return discountAmount;
    }
    
    public void setDiscountAmount(BigDecimal discountAmount) {
        this.discountAmount = discountAmount;
    }
    
    public String getPaymentStatus() {
        return paymentStatus;
    }
    
    public void setPaymentStatus(String paymentStatus) {
        this.paymentStatus = paymentStatus;
    }
    
    public String getPaymentMethod() {
        return paymentMethod;
    }
    
    public void setPaymentMethod(String paymentMethod) {
        this.paymentMethod = paymentMethod;
    }
    
    public Integer getExtensionCount() {
        return extensionCount;
    }
    
    public void setExtensionCount(Integer extensionCount) {
        this.extensionCount = extensionCount;
    }
    
    public Integer getRoomChangeCount() {
        return roomChangeCount;
    }
    
    public void setRoomChangeCount(Integer roomChangeCount) {
        this.roomChangeCount = roomChangeCount;
    }
    
    public Boolean getIsVip() {
        return isVip;
    }
    
    public void setIsVip(Boolean isVip) {
        this.isVip = isVip;
    }
    
    public String getMemberLevel() {
        return memberLevel;
    }
    
    public void setMemberLevel(String memberLevel) {
        this.memberLevel = memberLevel;
    }
    
    public Integer getEarnedPoints() {
        return earnedPoints;
    }
    
    public void setEarnedPoints(Integer earnedPoints) {
        this.earnedPoints = earnedPoints;
    }
    
    @Override
    public String toString() {
        return "ReservationVO{" +
                "id=" + id +
                ", reservationNumber='" + reservationNumber + '\'' +
                ", customerName='" + customerName + '\'' +
                ", customerPhone='" + customerPhone + '\'' +
                ", customerIdCard='" + customerIdCard + '\'' +
                ", customerEmail='" + customerEmail + '\'' +
                ", roomTypeId=" + roomTypeId +
                ", roomTypeName='" + roomTypeName + '\'' +
                ", roomTypeCode='" + roomTypeCode + '\'' +
                ", roomId=" + roomId +
                ", roomNumber='" + roomNumber + '\'' +
                ", checkinDate=" + checkinDate +
                ", checkoutDate=" + checkoutDate +
                ", guestCount=" + guestCount +
                ", roomCount=" + roomCount +
                ", nights=" + nights +
                ", totalAmount=" + totalAmount +
                ", paidAmount=" + paidAmount +
                ", balanceAmount=" + balanceAmount +
                ", status='" + status + '\'' +
                ", statusName='" + statusName + '\'' +
                ", source='" + source + '\'' +
                ", sourceName='" + sourceName + '\'' +
                ", specialRequests='" + specialRequests + '\'' +
                ", remarks='" + remarks + '\'' +
                ", arrivalTime=" + arrivalTime +
                ", departureTime=" + departureTime +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}